<?php
class UpdatesController{
	private $pathdb;
	private $pathsql;
	private $pathrap;
	private $db;
	function __construct(){
		$this->pathdb = '../database/';
		$this->pathsql = '../sql/';
		$this->pathrap = '../raporty/uaktualnienia/';
		tools::_add_folder($this->pathsql);
		tools::_add_folder($this->pathrap);
	}

	private function getDB($host){
		global $parameters;	
		$paramUpdates = array('drivers'=>array('driver'=>'sqlite'),'sqlite'=>array('host'=>$host, 'database'=>'' ));
		$this->db = config::getDB($paramUpdates);
	}
	
	private function wczytajZapytania($fileSQl, $ASeparator = ';'){
		if(!is_file($fileSQl)) return false;
		$fh = fopen($fileSQl, 'r+');
	    $tmpstr = fread($fh, filesize($fileSQl));
	    if ($tmpstr == '') {
	        return false;
	    } else {
	        return explode($ASeparator, trim($tmpstr));
	    }
	}	
	
	private function pokazListeBaz(){
		$dbs = tools::get_files($this->pathdb,null,0);
		foreach ($dbs as $folder) {
			$grupa = str_replace($this->pathdb,'',$folder['folder']);
			echo $grupa."<hr>
				<input type=\"button\" value=\"zaznacz wszystkie\" onclick=\"$('.{$grupa}:checkbox').attr('checked',true);\"/> 
				<input type=\"button\" value=\"odznacz wszystkie\" onclick=\"$('.{$grupa}:checkbox').attr('checked',false);\"/><br/>
			";			
			foreach ($folder['files'] as $db){
				if(is_array($db) && !empty($db)) echo "<input type=\"checkbox\" class=\"{$grupa}\" name=\"update_database[]\" value=\"{$db['nazwa']}\"/> ".str_replace($folder['folder'].'/','',$db['nazwa'])."<br/>"; 
			}
		}
	}
	
	private function pokazAktualizacje(){
		$sqls = tools::get_files($this->pathsql,null,0);
		foreach ($sqls as $sql) {
			echo '<strong>'.str_replace($this->pathsql,'',$sql['folder']).'</strong><br/>';
			foreach ($sql['files'] as $file){
				if(is_array($file) && !empty($file)) echo "<input type=\"radio\" name=\"Aktualizacja\" value=\"{$file['nazwa']}\"/> ".str_replace($sql['folder'].'/','',$file['nazwa'])."<br/>"; 
			}
		}
	}
	
	private function pokazRaporty(){
		$sqls = tools::get_files($this->pathrap,null,0);
		foreach ($sqls as $sql) {
			echo '<strong>'.str_replace($this->pathrap,'',$sql['folder']).'</strong><br/>';
			foreach ($sql['files'] as $file){
				if(is_array($file) && !empty($file)) echo "<input type=\"radio\" name=\"Raport\" value=\"{$file['nazwa']}\"/> ".str_replace($sql['folder'].'/','',$file['nazwa'])."<br/>"; 
			}
		}
	}
	
	public function wykoanjAktualizacje(){
		global $config;

		// usun niepotrzebne dane
//		$remove = '/<!--panel-->(.*?)<!--\/panel-->/s';
//		$buffer__ = preg_replace($remove, '', $buffer);


		if($config->__isset('update_database') && $config->__isset('Aktualizacja')){
			$raport = new Logs_Logs($this->pathrap.str_replace('/','_',$config->Aktualizacja).' '.date('YmdHis').'.rap');			
			// wczytaj plik sql
			$sql_ = $this->wczytajZapytania($config->Aktualizacja);
			
			// polacz sie z baza
			foreach ($config->update_database as $db_) {
				$this->getDB($db_);		
			
				// wykonaj dzialanai
				foreach ($sql_ as $query) {
					$raport->add( "<br>\n\r".tools::__adodb('exec',$query,true,$this->db,'sqlite'),'a');
				}
			}
			return 'raport wykoany...';
		}else{
			return 'brak danych do wykonania raportu...';
		}

	}

	public function indexAction(){
		global $parameters,$config;
		if ($parameters['admin']['user'] == $_SERVER['PHP_AUTH_USER'] && $parameters['admin']['pass'] == md5($_SERVER['PHP_AUTH_PW'])){
			
			switch($config->akcja){
				case 'wykonaj aktualizację':					
					// wykonaj operacje na bazach	
					$res = $this->wykoanjAktualizacje();				
					tools::_redirect($_SERVER['PHP_SELF'],$res,1,'js');
					break;
				case 'wyswietl raport':
					if(is_file($config->Raport)){
						$fh = fopen($config->Raport, 'r+');
						echo "<a href=\"http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}\">strona główna</a>
						<br/><br/>
						{$config->Raport}
						<hr>
						";
					    echo fread($fh, filesize($config->Raport));
						
						break;
					}
					
				case 'dodaj plik aktualizacji':
					$max_wielkosc_pliku = 1048576 * 1; // 1MB = 1048576;
					foreach ($_FILES as $fieldName => $file) {
						if ($file['size'] <= $max_wielkosc_pliku && $file['error'] == 0 ) {
							$up=move_uploaded_file($file['tmp_name'], $this->pathsql.$file['name']  );
							tools::_redirect($_SERVER['PHP_SELF'],'skopiowano plik...',15,'js');
						}else{
							tools::_redirect($_SERVER['PHP_SELF'],'nie skopiowano pliku...',15,'js');
						}
					}
					
					break;
					
				default:
					echo "
						<script type=\"text/javascript\">
						$(document).ready(function(){
							$(\"input[@type='file']\").change( function() {
								// check input ($(this).val()) for validity here
								ext = ($(this).val());
								ext = ext.substring(ext.length-4,ext.length);
								ext = ext.toLowerCase();
								if(ext == 'psql') {
									$('#akcja__').attr('value','dodaj plik aktualizacji');
									$(\"form:first\").submit();
								}else{
								  $(this).attr(\"value\",null);
								  alert(\"Proszę wybrać plik typu psql\");
							  }
							});
						});
						</script>	
						<form action=\"\" method=\"post\" name=\"updates\" enctype=\"multipart/form-data\" >
						<input type=\"hidden\" name=\"akcja\" id=\"akcja__\"/>
						zaznacz bazy danych do aktualizacji...";
					echo "<hr>
						<input type=\"button\" value=\"zaznacz wszystkie\" onclick=\"$(':checkbox').attr('checked',true);\"/> 
						<input type=\"button\" value=\"odznacz wszystkie\" onclick=\"$(':checkbox').attr('checked',false);\"/><br/>
					";
					$this->pokazListeBaz();
					echo '<br/><br/>zaznacz aktualizację...';
					echo "<hr>
						<input name=\"akcja\" type=\"submit\" value=\"wykonaj aktualizację\"/> <input type=\"file\" name=\"plik\" value=\"dodaj plik aktualizacji\" onselect=\"alert('xxx');\"/><br/>
					";		
					$this->pokazAktualizacje();		
					echo '<br/><br/>raporty z poprzednich uaktualnien...';
					echo '<hr>
					<input name="akcja" type="submit" value="wyswietl raport"/><br/>	';	
					$this->pokazRaporty();
					echo '</form>';	
					
			}				
		}
	}
}

